package modelo.dao;

import java.sql.SQLException;
import java.util.List;

import javax.transaction.Transaction;

import modelo.Contato;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import util.HibernateUtil;
import controle.AlterarContatoBean;

public class ContatoDAO {
	static Logger logger = Logger.getLogger(ContatoDAO.class);
	
	
	public List<Contato> listar(String usuario) throws Exception {
		SessionFactory fabrica = HibernateUtil.getSessionFactory();
		Session sessao = fabrica.getCurrentSession();
		sessao.beginTransaction();
		
		String hql = "from " + Contato.class.getName()
				+ " p where p.nomeUsuario = '" + usuario + "'";
		@SuppressWarnings("unchecked")
		
		List<Contato> lista = sessao.createQuery(hql).list();
		sessao.getTransaction().commit();
		return lista;
	}

	public boolean adicionar(String nome, String telefone,
		String endereco, String dataNascimento, String email,
		String nomeUsuario) throws Exception {
		
		Contato contato = new Contato();

		SessionFactory fabrica = HibernateUtil.getSessionFactory();
		Session sessao = fabrica.getCurrentSession();
		sessao.beginTransaction();

		contato.setNome(nome);
		contato.setTelefone(telefone);
		contato.setDataNascimento(dataNascimento);
		contato.setEndereco(endereco);
		contato.setEmail(email);
		contato.setNomeUsuario(nomeUsuario);
		
		sessao.merge(contato);
		sessao.getTransaction().commit();
		return true;
	}
	
	public boolean alterar(long id, String nome, String telefone,
			String dataNascimento, String endereco, String email,
			String nomeUsuario) throws Exception {
		
		Contato contato = new Contato();
		
		SessionFactory fabrica = HibernateUtil.getSessionFactory();
		Session sessao = fabrica.getCurrentSession();
		sessao.beginTransaction();

		contato.setId(id);
		contato.setNome(nome);
		contato.setTelefone(telefone);
		contato.setEndereco(endereco);
		contato.setDataNascimento(dataNascimento);
		contato.setEmail(email);
		contato.setNomeUsuario(nomeUsuario);
		
		sessao.flush();
		sessao.merge(contato);
		sessao.getTransaction().commit();
		return true;
	}

	public boolean remover(long id) throws Exception {
		
		Contato contato = new Contato();
		
		SessionFactory fabrica = HibernateUtil.getSessionFactory();
		Session sessao = fabrica.getCurrentSession();
		sessao.beginTransaction();
		
		contato.setId(id);
		
		sessao.delete(contato);
		
		sessao.flush();
		sessao.getTransaction().commit();
		return true;
	}
	
}
